#ifndef COORDS_H__
#define COORDS_H__

#include "types.h"

namespace common
{
  /// Полярные координаты
	struct PolarCoords
	{
		double phi, r;
		void setArray(const Eigen::Array2d& arr)
		{
			phi = arr[0];
			r = arr[1];
		}
		Eigen::Vector2d getAsArray() const
		{
			Eigen::Vector2d res;
			res << phi, r;
			return res;
		}
	};

  /// Декартовы координаты
	struct RectCoords
	{
		double x, y;
		RectCoords(double a_x = 0.0, double a_y = 0.0):
		x(a_x),y(a_y) { /* void */ }
		void setArray(const Eigen::Array2d& arr)
		{
			x = arr(0);
			y = arr(1);
		}
		Eigen::Vector2d getAsArray() const
		{
			Eigen::Vector2d res;
			res << x, y;
			return res;
		}
	};

  /// Преобразование координат без смещения
  struct UnbiasedTransform
  {
    /**
     * \brief Пересчет полярных в декартовы
     *
     * \param[in] a_polar - входные полярные
     * \return выходные декартовы
     */
    static RectCoords doPolarToRect(
        const PolarCoords& a_polar 
        );
  };
};

#endif // COORDS_H__
